package com.hll.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

/**
 * @author: Mr.Hu
 * @create: 2021-03-12 15:33
 */
@Controller
public class RestfulController {
  /*请求方式为  /commit?a=1&b=2 */
  /*如果直接写 /commit就会报错，必须传递指定参数,@RequestParam指定名字，当然如果是后端才有用的参数比如 model就不需要*/
  // model参数不是必要的，只是为了传递前端数据，相同功能的还有ModelMap,参数顺序无所谓
  // 像HttpServletRequest\Response\session都可以加上去方法参数列表
  @RequestMapping("/commit")
  public String index3(@RequestParam("a") int a, int b, Model model) {
    int result = a + b;
    model.addAttribute("msg", "结果：" + result);
    return "hello"; /*转发*/
    /*你也可以不使用视图解析器，前面加/hello就行 */
    // return "redirect:hello"; //重定向,地址栏会变
  }

  /*如果我访问/commit/1/2 --- result=3,  如果是 /3/1,  就是4, 路径是动态的*/
  // 映射访问路径
  @RequestMapping("/commit/{p1}/{p2}") /*参数的个数、类型可以自定*/
  public String index(@PathVariable int p1, @PathVariable int p2, Model model) {
    int result = p1 + p2;
    // Spring MVC会自动实例化一个Model对象用于向视图中传值
    model.addAttribute("msg", "结果：" + result);
    // 返回视图位置
    return "hello";
  }

  /*还有一些注解例如  GetMapping\PostMapping 则是处理特定类型请求的，作用和RequestMapping一样*/
  // 映射访问路径,必须是POST请求
  @RequestMapping(
      value = "/hello",
      method = {RequestMethod.POST}) /*限定Post,如果通过地址栏(get方法)访问就会出错*/
  public String index2(Model model) {
    model.addAttribute("msg", "hello!");
    return "hello";
  }

  /*请求路径一样，但请求类型不同, get/post*/
  @GetMapping("/add")
  public String index4(Model model) {
    model.addAttribute("msg", "add!");
    return "hello";
  }

  @PostMapping("/add")
  public String index5(Model model) {
    model.addAttribute("msg", "post!");
    return "hello";
  }

  /*@PostMapping("user")
  要求提交的表单域和对象的属性名一致
  public String user(User user){
    System.out.println(user);
    return "hello";
  }*/
}
